home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / source / src / graph_alg / _dfsnum.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  1.5 KB  |  60 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  _dfsnum.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15.  
  16. /*******************************************************************************
  17. *                                                                              *
  18. *  DFS_NUM (depth first search numbering)                                      *
  19. *                                                                              *
  20. *******************************************************************************/
  21.  
  22.  
  23. #include <LEDA/graph_alg.h>
  24.  
  25. static int dfs_count1,dfs_count2;
  26.  
  27. static void dfs(node v, node_array<bool>& reached, 
  28.                         node_array<int>& dfsnum, 
  29.                         node_array<int>& compnum,
  30.                         list<edge>& T )
  31. { node w;
  32.   edge e;
  33.  
  34.   reached[v] = true;
  35.   dfsnum[v] = ++dfs_count1;
  36.  
  37.   forall_adj_edges(e,v) 
  38.     { w = target(e);
  39.       if (!reached[w]) 
  40.        { T.append(e);
  41.          dfs(w,reached,dfsnum,compnum,T);
  42.         }
  43.      }
  44.  
  45.   compnum[v] = ++dfs_count2;
  46.  
  47. list<edge> DFS_NUM(const graph& G, node_array<int>& dfsnum, 
  48.                                    node_array<int>& compnum)
  49.   list<edge> T;
  50.   node_array<bool> reached(G,false);
  51.   node v;
  52.   dfs_count1 = dfs_count2 = 0;
  53.   forall_nodes(v,G) if (!reached[v]) dfs(v,reached,dfsnum,compnum,T);
  54.   return T;
  55. }
  56.  
  57.